package activemq;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * @author lishaojun
 * @create 2019-07-07-下午 4:52
 */
public class JmsProduce_TX {
    public static final String ACTIVEMQ_URL = "tcp://106.13.85.181:61616";
    public static final String QUEUE_NAME = "queue01_tx";
    public static void main(String args[]) throws Exception{
        //1.创建连接工厂,按照地址给定的用户名密码
        ActiveMQConnectionFactory activeMQConnectionFactory=new ActiveMQConnectionFactory(ACTIVEMQ_URL);
        //2.通过连接工厂获得连接
        Connection connection=activeMQConnectionFactory.createConnection();
        connection.start();
        //3.创建会话,方法两个参数一个是事务，一个是签收
        /*开启事务的一定要提交
        * 事务是false 消息只要已发送send，直接进队列
        * 事务是true 消息发送send，不会进队列,必需要commit消息才会进队列 在session关闭之前  session.commit();就可以了
        *为啥要有事务？
        * 应为发送消息的时候可能出错，
        * try{
        * ok? session.commit();
        * }catch(){
        * session.rollback
        * }
        *
        * */
        Session session=connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //4.创建目的地，具体是队列或者是主题
        Queue queue=session.createQueue(QUEUE_NAME);
        //5.创建消息的生产者
        MessageProducer messageProducer= session.createProducer(queue);
        messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);//默认是持久化的，消息的非持久化，服务器宕机，消息不保存,如果持久化，消息会保存
        //6.通过使用消息生产者生产三条消息发送到mq的队列里
        for (int i=1;i<=3;i++){
            //7.创建消息
            TextMessage textMessage = session.createTextMessage("msg----" + i);
            textMessage.setStringProperty("c01","vip");//设置详细属性
            //8.通过消息生产者发布
            messageProducer.send(textMessage);
//            MapMessage mapMessage = session.createMapMessage();
//            mapMessage.setString("k1","v1");
//            messageProducer.send(mapMessage);

        }
        //9.关闭资源
        messageProducer.close();
        //session.commit();
        session.close();
        connection.close();
        System.out.println("消息生产完毕");
    }

}
